# -*- coding: utf-8 -*-
"""
date: Mon Dec 17 14:51:15 2018
python: Anaconda 3.6.5
author: kanade
email: kanade@blisst.cn
"""
import numpy as np
import matplotlib.pyplot as mp
import matplotlib.animation as ma


def update(number):
    global sc, size, color, position
    # 大小加一个随机量
    size += np.random.randint(30, 120, n)
    # 让其中一个泡泡位置变化，然后大小从0开始，颜色重新随机
    burst = number % n
    position[burst] = np.random.random_sample(2)
    size[burst] = 0
    color[burst] = np.random.random_sample(4)
    # 将变化的属性给scatter，也就是让scatter以这些参数重新绘制图形
    sc.set_offsets(position)
    sc.set_sizes(size)
    sc.set_facecolor(color)

n = 100
# 随机从0-1的浮点数，维度为(n, 2)
position = np.random.uniform(0, 1, (n, 2))
# 随机50-750的整数，维度为(n,)
size = np.random.randint(50, 750, n)
# 随机0-1的浮点数，维度为(n, 4)
color = np.random.random_sample((n, 4))
# 颜色可以给用英文表示的颜色，也可以给十六进制的代码，比如#FFFFFF
# 而16进制的#FFFFFF又可以拆分为红(r)、绿(g)、蓝(b),表示形式为(255, 255, 255)
# 在画图的时候还可以加入一个透明度，取值在0-1，(255, 255, 255, 0.5)
# matplotlib将rgb的取值从0-255变成了0-1，也就是将rgb三个值分别除以255
# 就变成了四个0-1的数组成的数组(1, 1, 1, 0.5)

mp.figure('Animation')
mp.title('Animation', fontsize=20)
mp.xticks(())
mp.yticks(())

sc = mp.scatter(position[:, 0], position[:, 1],
                s=size, c=color)
# mp.gcf()表示当前窗口
anim = ma.FuncAnimation(mp.gcf(), update, interval=33)

mp.show()










